#include "Caja.h"

#include "ConfigurationFile.h"
#include "Constantes.h"

using namespace std;

Caja::Caja()
{
}

Caja::Caja(bool crear)
{
	if (crear)
		this->crear();
	else
		this->abrir();
}

Caja::Caja(const Caja& other)
{
	m_KeyCaja = other.m_KeyCaja;
	m_Caja = other.m_Caja;
}

Caja::~Caja()
{
    // Solo se libera al final, con una llamada explicita a Caja::Liberar
    m_Caja.liberar();
}

void Caja::abrir()
{
    m_Caja.unirse(this->getKeyCaja());
}

void Caja::crear()
{
	m_Caja.crear(this->getKeyCaja());
}

string Caja::getKeyCaja()
{
	if(m_KeyCaja.empty())
		m_KeyCaja = ConfigurationFile::getProperty(Properties::KEY_CAJA);
	return m_KeyCaja;
}

bool Caja::guardarRecaudacion(unsigned int monto)
{
	m_Caja.lock();
	
	unsigned int currRec =  m_Caja.leer();
	currRec += monto;
	m_Caja.escribir(currRec);
	
	m_Caja.unlock();
}

unsigned int Caja::obtenerRecaudacion() const
{
	return m_Caja.leerSincronizado();
}